package org.jground.rx.ui.zk.report;

import java.io.IOException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jground.rx.RXSystem;
import org.jground.rx.report.RXReport;
import org.jground.rx.ui.IMainPanel;
import org.jground.rx.ui.zk.UIFrame;
import org.jground.rx.ui.zk.UIStyles;
import org.jground.rx.ui.zk.docu.UIFileDownload2;
import org.jground.zk.zulX.HboxX;
import org.jground.zk.zulX.VboxX;
import org.jground.zk.zulX.WindowX;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zk.ui.event.Events;
import org.zkoss.zul.Button;
import org.zkoss.zul.Caption;
import org.zkoss.zul.Label;

public class UIReportWindow extends WindowX implements EventListener, IMainPanel<Component> {

    private static Log logger = LogFactory.getLog(UIReportWindow.class);

    private UIFrame uiFrame;
    private UIReportPanel uiReportPanel;
    private Button updateBt;
    private Button resetBt;
    private Button closeBt;

    //
    
    //
    // private Toolbarbutton downloadReportTb;
    // private Jasperreport jasperreport;
    private UIFileDownload2 downloadReport;

    public UIReportWindow(UIFrame uiFrame, String mrid) {
        
        this.uiFrame = uiFrame;
        RXReport rxReport = RXSystem.getInstance().getRxService().getRXReport(mrid);
        //
        // COMPONENTS
        //
        Caption caption = new Caption(" " + rxReport.getName());
        // downloadReportTb = new Toolbarbutton("Download Report");

        VboxX descriptionHbox = new VboxX();
        descriptionHbox.setStyle("padding: 6px; margin: 4px;");
        descriptionHbox.add(new Label(rxReport.getDescription()));
        uiReportPanel = new UIReportPanel(uiFrame, rxReport);
        
        updateBt = new Button("Update Report");
        resetBt = new Button("Reset Report");
        closeBt = new Button("Close Report");
        HboxX buttonHbox = new HboxX();
        buttonHbox.setSclass(UIStyles.BUTTONGROUP);
        //
        // jasperreport = new Jasperreport();
        downloadReport = new UIFileDownload2();
        downloadReport.setLabel("Report as CSV File");
        try {
            downloadReport.setContentType("text/comma-separated-values; charset=utf-8");
            downloadReport.setContentType("text/html; charset=utf-8");
            downloadReport.setFile(uiReportPanel.getCsvFile());
        } catch (Exception e) {
            logger.error(e,e);
        }
        //
        // LAYOUT
        //
        caption.setParent(this);
        // TODO downloadReportTb.setParent(caption);
        buttonHbox.add(updateBt);
        buttonHbox.add(resetBt);
        buttonHbox.add(closeBt);
        descriptionHbox.add(uiReportPanel);
        this.add(descriptionHbox);
        this.add(new HboxX(downloadReport));
        
        this.add(buttonHbox);
        // _createMenuBar();
        // TODO jasperreport.setParent(this);
        //
        // EVENT HANDLING
        //

        // downloadReportTb.addEventListener(Events.ON_CLICK, this);
        updateBt.addEventListener(Events.ON_CLICK, this);
        resetBt.addEventListener(Events.ON_CLICK, this);
        closeBt.addEventListener(Events.ON_CLICK, this);

    }

    public void onEvent(Event he) {
        if (he.getTarget() == updateBt) {
            uiReportPanel.update();
        }
        if (he.getTarget() == resetBt) {
            uiReportPanel.reset();
        }
        if (he.getTarget() == closeBt) {
            uiFrame.showHomePanel();
        }
    }

    public void beforeClose() {

    }

    public void beforeShow() {

    }

    public Component getView() {
        return this;
    }

}



class UIReportColumnFilterFactory {

    public static IUIReportColumnFilter create(UIReportColumn uiColumn) {
        // String filterType = uiColumn.GetMOColumn().GetFilterType();
        // if(filterType.equals(RXColumn.FT_SELECT)) {
        // return new UIReportColumnFilterSelect(uiFrame, uiColumn);
        // }
        // if(filterType.Equals(RXColumn.FT_STARTSWITH)) {
        // return new UIReportColumnFilterText(uiFrame, uiColumn);
        // }
        // if(filterType.Equals(RXColumn.FT_CONTAINS)) {
        // return new UIReportColumnFilterText(uiFrame, uiColumn);
        // }
        // if(filterType.Equals(RXColumn.FT_YEAR)) {
        // if(uiColumn.GetMOColumn().GetMOAttribute().GetMOType() is
        // RXTypeDateTime) {
        // return new UIReportColumnFilterSelect(uiFrame, uiColumn, 4);
        // }
        // }
        return null;
    }

}
